#include <QApplication>    // Qt 应用程序类，管理程序生命周期和事件循环
#include <QWidget>         // Qt 窗口和控件的基类
#include <QStackedWidget>  // 用于管理多个页面的堆叠控件
#include <QVBoxLayout>     // 垂直布局管理器
#include <QPushButton>     // 按钮控件
#include <QLabel>          // 文本标签控件
#include <QLineEdit>       // 文本输入框控件
#include <QHBoxLayout>     // 水平布局管理器（本例中未使用，但引入了）

int main(int argc, char *argv[]) {
    QApplication app(argc, argv); // 创建 Qt 应用对象，初始化环境

    QWidget *mainWindow = new QWidget;                 // 创建主窗口
    mainWindow->setWindowTitle("账号操作界面 - 登录/注册/找回密码"); // 设置窗口标题

    QVBoxLayout *mainLayout = new QVBoxLayout;         // 创建主布局（垂直布局）

    // ------------------ 创建堆叠页面控件 ------------------
    QStackedWidget *stack = new QStackedWidget;        // 堆叠控件，支持切换显示不同的页面

    // ---------- 页面1：登录 ----------
    QWidget *loginPage = new QWidget;                   // 创建登录页面的容器控件
    QVBoxLayout *loginLayout = new QVBoxLayout;         // 登录页面的垂直布局管理器
    loginLayout->addWidget(new QLabel("用户名:"));      // 添加用户名标签
    loginLayout->addWidget(new QLineEdit);              // 添加用户名输入框
    loginLayout->addWidget(new QLabel("密码:"));        // 添加密码标签
    loginLayout->addWidget(new QLineEdit);              // 添加密码输入框

    QPushButton *btnToRegister = new QPushButton("注册账号");  // “注册账号”按钮
    QPushButton *btnToForgot = new QPushButton("忘记密码");    // “忘记密码”按钮
    QPushButton *btnLogin = new QPushButton("登录");           // “登录”按钮

    loginLayout->addWidget(btnLogin);                   // 把登录按钮加入布局
    loginLayout->addWidget(btnToRegister);              // 把注册按钮加入布局
    loginLayout->addWidget(btnToForgot);                // 把忘记密码按钮加入布局
    loginPage->setLayout(loginLayout);                   // 设置登录页面的布局

    // ---------- 页面2：注册 ----------
    QWidget *registerPage = new QWidget;                 // 创建注册页面控件
    QVBoxLayout *regLayout = new QVBoxLayout;            // 注册页面布局
    regLayout->addWidget(new QLabel("新用户名:"));       // 新用户名标签
    regLayout->addWidget(new QLineEdit);                  // 新用户名输入框
    regLayout->addWidget(new QLabel("设置密码:"));       // 设置密码标签
    regLayout->addWidget(new QLineEdit);                  // 设置密码输入框
    regLayout->addWidget(new QLabel("确认密码:"));       // 确认密码标签
    regLayout->addWidget(new QLineEdit);                  // 确认密码输入框

    QPushButton *btnRegister = new QPushButton("注册");    // 注册按钮
    QPushButton *btnBackToLogin1 = new QPushButton("返回登录"); // 返回登录按钮

    regLayout->addWidget(btnRegister);                   // 注册按钮加入布局
    regLayout->addWidget(btnBackToLogin1);               // 返回登录按钮加入布局
    registerPage->setLayout(regLayout);                   // 设置注册页面布局

    // ---------- 页面3：找回密码 ----------
    QWidget *forgotPage = new QWidget;                    // 创建找回密码页面控件
    QVBoxLayout *forgotLayout = new QVBoxLayout;          // 找回密码页面布局
    forgotLayout->addWidget(new QLabel("请输入注册邮箱:")); // 邮箱输入提示标签
    forgotLayout->addWidget(new QLineEdit);               // 邮箱输入框
    QPushButton *btnRecover = new QPushButton("发送验证码"); // 发送验证码按钮
    QPushButton *btnBackToLogin2 = new QPushButton("返回登录"); // 返回登录按钮

    forgotLayout->addWidget(btnRecover);                  // 发送验证码按钮加入布局
    forgotLayout->addWidget(btnBackToLogin2);             // 返回登录按钮加入布局
    forgotPage->setLayout(forgotLayout);                  // 设置找回密码页面布局

    // ---------- 将三个页面添加进堆叠控件 ----------
    stack->addWidget(loginPage);    // 登录页面索引 0
    stack->addWidget(registerPage); // 注册页面索引 1
    stack->addWidget(forgotPage);   // 找回密码页面索引 2

    mainLayout->addWidget(stack);   // 主布局中加入堆叠控件
    mainWindow->setLayout(mainLayout); // 设置主窗口布局
    mainWindow->resize(300, 300);    // 设置窗口默认大小
    mainWindow->show();              // 显示窗口

    // ------------------ 连接信号槽，实现页面切换 ------------------
    QObject::connect(btnToRegister, &QPushButton::clicked, [=]() {
        stack->setCurrentIndex(1);  // 点击“注册账号”，切换到注册页面
    });

    QObject::connect(btnToForgot, &QPushButton::clicked, [=]() {
        stack->setCurrentIndex(2);  // 点击“忘记密码”，切换到找回密码页面
    });

    QObject::connect(btnBackToLogin1, &QPushButton::clicked, [=]() {
        stack->setCurrentIndex(0);  // 点击“返回登录”，切换到登录页面
    });

    QObject::connect(btnBackToLogin2, &QPushButton::clicked, [=]() {
        stack->setCurrentIndex(0);  // 点击“返回登录”，切换到登录页面
    });

    return app.exec(); // 启动事件循环
}
